import { LoadType } from '@/api/waybill/index'
import type { VehicleTrackData } from '@/api/vehicle-track/vehicleTrack'

export const getInOutTimeArr = (AMap, points: VehicleTrackData[], chartAreaPly) => {
  if (!points.length) return {}

  const loadInTimeArr = [], // 进入装货围栏时间
    loadOutTimeArr = [] // 出装货围栏时间

  const unloadInTimeArr = [], // 进入卸货围栏时间
    unLoadOutTimeArr = [] // 出卸货围栏时间
  const type = chartAreaPly.getExtData().loadType
  let isOut = true // 上一个点是否在围栏外
  const len = points.length
  let i = 0
  // 如果数据只有一条，在围栏内，进出围栏都是同一条数据
  // 所以循环至少要执行一次
  do {
    const comparePoint = new AMap.LngLat(points[i].lng, points[i].lat)
    // 是否在围栏内
    const result = chartAreaPly.contains(comparePoint)
    if (result && isOut) {
      // 进入围栏
      isOut = false // 记录已进入围栏
      // 记录进入围栏时间
      type === LoadType.Load ? loadInTimeArr.push(points[i].date) : unloadInTimeArr.push(points[i].date)
    } else if (!result && !isOut) {
      // 出围栏
      isOut = true
      // 记录出围栏时间
      type === LoadType.Load ? loadOutTimeArr.push(points[i].date) : unLoadOutTimeArr.push(points[i].date)
    }
    i++
  } while (i < len - 1)

  // 最后一直没有出围栏处理
  // 绘制 echart 区域时，需要作为结束点
  // 当作出围栏处理
  if (!isOut) {
    // 0 条数据不会进判断
    type === LoadType.Load ? loadOutTimeArr.push(points[len - 1].date) : unLoadOutTimeArr.push(points[len - 1].date)
  }

  return { loadInTimeArr, loadOutTimeArr, unloadInTimeArr, unLoadOutTimeArr }
}
// 计算 echart 中 markArea
export const markChartRail = ({ loadInTimeArr = [], loadOutTimeArr = [], unloadInTimeArr = [], unLoadOutTimeArr = [] }, markAreas = []) => {
  if (loadInTimeArr.length) {
    loadInTimeArr.forEach((t, i) => {
      markAreas.push([
        {
          xAxis: t,
          itemStyle: {
            color: 'rgba(177, 241, 208, 0.5)'
          }
        },
        {
          xAxis: loadOutTimeArr[i]
        }
      ])
    })
  }
  if (unloadInTimeArr.length) {
    unloadInTimeArr.forEach((t, i) => {
      markAreas.push([
        {
          xAxis: t,
          itemStyle: {
            color: 'rgba(238, 202, 187, 0.5)'
          }
        },
        {
          xAxis: unLoadOutTimeArr[i]
        }
      ])
    })
  }
  return markAreas
}

// 获取横坐标和车辆速度数据
export const getCarSpeedLine = (data: VehicleTrackData[]) => {
  const xAxisData = data.map(item => item.date)
  const speedData = data.map(item => item.speed)
  return {
    xAxisData,
    speedData
  }
}
